package com.ljf.interestingmaps.util;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BitmapFactory.Options;
import android.util.Log;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class NetUtils {

	/**
	 * 获取网络文件大小
	 * @return
	 * @throws IOException
	 */
	public static int getNetFileLength(String url1) {
		int length=-1;
		URL url;
		try {
			url = new URL(url1);
			HttpURLConnection urlcon=(HttpURLConnection)url.openConnection();
			//根据响应获取文件大小
			length=urlcon.getContentLength();
			urlcon.disconnect();
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return length;
	}
	// 读取整个文件内容
	public static String getUrlContent(String urlStr) {
		String ret = null;
		try {
			URL url = new URL(urlStr);
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			InputStream is = conn.getInputStream();
			BufferedReader reader = new BufferedReader(new InputStreamReader(is));
			
			StringBuffer buffer = new StringBuffer();
			char[] buff = new char[1024 * 4];
			int len;
			while((len = reader.read(buff)) > 0){
				buffer.append(buff, 0, len);
			}
			is.close();
			reader.close();			
			ret = buffer.toString();			
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}

		return ret;
	}

	public static boolean downloadFile(String urlStr , String path){
		long time1 = System.currentTimeMillis();
		try {
			URL url = new URL(urlStr);
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			InputStream is = conn.getInputStream();
			FileOutputStream out = new FileOutputStream(new File(path));
			int len;
			byte[] buff = new byte[1024*80];
			while ((len = is.read(buff)) != -1) {
				out.write(buff,0,len);				
			}
			out.flush();
			out.close();
			is.close();
			Log.e("peace", "down filelist cost :"+ (System.currentTimeMillis() - time1));
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
		return true;
	}
	public static boolean downloadFile(String urlStr , String path, DownloadListener listener){
		try {
			URL url = new URL(urlStr);
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			int fileLenth = conn.getContentLength();
			
			InputStream is = conn.getInputStream();
			FileOutputStream out = new FileOutputStream(new File(path));
			StringBuffer buffer = new StringBuffer();
			int len;
			int process = 0;
			if(listener !=null){
				listener.onProcess(0);
			}
			byte[] buff = new byte[1024*80];
			while ((len = is.read(buff)) != -1) {
				out.write(buff,0,len);	
				process += len;
				if(listener !=null){
					listener.onProcess((int) (process*100.0f/fileLenth));
				}
			}
			out.flush();
			out.close();
			is.close();
			if(listener !=null){
				listener.onSuccessed();
			}
		} catch (Exception e) {
			e.printStackTrace();
			if(listener !=null){
				listener.onError();
			}
			return false;
		}
		return true;
	}
	public interface DownloadListener{
		void onProcess(int percent);
		void onSuccessed();
		void onError();
	}
	/**
     * 从网络中获取图片，以流的形式返回
     * @return
     */
    public static InputStream getImageViewInputStream(String url) throws IOException {
        InputStream inputStream = null;
        if (url != null) {
            //打开连接
            HttpURLConnection httpURLConnection = (HttpURLConnection)new URL(url).openConnection();
            httpURLConnection.setConnectTimeout(3000);//设置网络连接超时的时间为3�?
            httpURLConnection.setRequestMethod("GET");        //设置请求方法为GET
            httpURLConnection.setDoInput(true);                //打开输入�?
            int responseCode = httpURLConnection.getResponseCode();    // 获取服务器响应�?
            if (responseCode == HttpURLConnection.HTTP_OK) {        //正常连接
                inputStream = httpURLConnection.getInputStream();        //获取输入�?
            }
        }
        return inputStream;
    }
    public static Bitmap getNetImage(String url){
    	try {
			return BitmapFactory.decodeStream(getImageViewInputStream(url));
		} catch (IOException e) {
			e.printStackTrace();
			return null;
		}
    }
    public static Bitmap getNetImageFitImageView(String url, int width, int height){
    	try {
    		Options op = new Options();
    		op.outWidth = width;
    		op.outHeight = height;
			return BitmapFactory.decodeStream(getImageViewInputStream(url),null,op);
		} catch (IOException e) {
			e.printStackTrace();
			return null;
		}
    }
    

    /**
     * 向指定URL发送GET方法的请求
     * 
     * @param url
     *            发送请求的URL
     * @param param
     *            请求参数，请求参数应该是 name1=value1&name2=value2 的形式。
     * @return URL 所代表远程资源的响应结果
     */
//    public static String sendGet(String url, String param) {
//        String result = "";
//        BufferedReader in = null;
//        try {
//        	String urlNameString = null;
//        	if(param != null && !param.equals("")){
//        		urlNameString= url + "?" + param;
//        	}else {
//        		urlNameString= url;
//        	}
//
//            URL realUrl = new URL(urlNameString);
//            // 打开和URL之间的连接
//            URLConnection connection = realUrl.openConnection();
//            // 设置通用的请求属性
//            connection.setRequestProperty("accept", "*/*");
//            connection.setRequestProperty("connection", "Keep-Alive");
//            connection.setRequestProperty("user-agent",
//                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
//            connection.setRequestProperty("token", UserService.getInstance().getToken());
//            // 建立实际的连接
//            connection.connect();
//            // 获取所有响应头字段
//            Map<String, List<String>> map = connection.getHeaderFields();
//            // 遍历所有的响应头字段
//            for (String key : map.keySet()) {
//                System.out.println(key + "--->" + map.get(key));
//            }
//            // 定义 BufferedReader输入流来读取URL的响应
//            in = new BufferedReader(new InputStreamReader(
//                    connection.getInputStream()));
//            String line;
//            while ((line = in.readLine()) != null) {
//                result += line;
//            }
//        } catch (Exception e) {
//            System.out.println("发送GET请求出现异常！" + e);
//            e.printStackTrace();
//        }
//        // 使用finally块来关闭输入流
//        finally {
//            try {
//                if (in != null) {
//                    in.close();
//                }
//            } catch (Exception e2) {
//                e2.printStackTrace();
//            }
//        }
//        return result;
//    }

    /**
     * 向指定 URL 发送POST方法的请求
     * 
     * @param url
     *            发送请求的 URL
     * @param param
     *            请求参数，请求参数应该是 name1=value1&name2=value2 的形式。
     * @return 所代表远程资源的响应结果
     */
//    public static String sendPost(String url, String param) {
//        PrintWriter out = null;
//        BufferedReader in = null;
//        String result = "";
//        try {
//            URL realUrl = new URL(url);
//            // 打开和URL之间的连接
//            URLConnection conn = realUrl.openConnection();
//            // 设置通用的请求属性
//            conn.setRequestProperty("accept", "*/*");
//            conn.setRequestProperty("connection", "Keep-Alive");
//            conn.setRequestProperty("user-agent",
//                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
//            conn.setRequestProperty("Content-Type","application/json");
//            String token = UserService.getInstance().getToken();
//            conn.setRequestProperty("token", token);
//            // 发送POST请求必须设置如下两行
//            conn.setDoOutput(true);
//            conn.setDoInput(true);
//            // 获取URLConnection对象对应的输出流
//            out = new PrintWriter(conn.getOutputStream());
//            // 发送请求参数
//            out.print(param);
//            // flush输出流的缓冲
//            out.flush();
//            // 定义BufferedReader输入流来读取URL的响应
//            in = new BufferedReader(
//                    new InputStreamReader(conn.getInputStream()));
//            String line;
//            while ((line = in.readLine()) != null) {
//                result += line;
//            }
//        } catch (Exception e) {
//            System.out.println("发送 POST 请求出现异常！"+e);
//            e.printStackTrace();
//        }
//        //使用finally块来关闭输出流、输入流
//        finally{
//            try{
//                if(out!=null){
//                    out.close();
//                }
//                if(in!=null){
//                    in.close();
//                }
//            }
//            catch(IOException ex){
//                ex.printStackTrace();
//            }
//        }
//        return result;
//    }
}
